﻿using System;
using System.Data;
using System.Linq;
using System.Collections .Generic ;

namespace LayerEntity.Sistema
{
    public class EDocumento
    {
        #region Constuctor
        public EDocumento(IDataRecord record)
        {
            this.IdDocumento = (int)record["id_documento"];
            this.Descripcion = record["des_documento"].ToString();
            this.Abreviatura = record["abre_documento"].ToString();
            this.CodigoSunat = record["doc_sunat"].ToString();
            this.CodigoSistema = record["tipodoc_sistema"].ToString();
            this.SigoDocumento = int.Parse(record["sig_documento"].ToString());
            this.IngresoSalida = (int)record["ingr_sali_documento"];
            this.NumeroItems = (int)record["num_lin_documento"];
            this.AfectoIgv = Convert.ToBoolean(int.Parse (record["afecto_igv"].ToString()));
            this.Valoriza = Convert.ToBoolean (int.Parse (record["val_documento"].ToString ()));
            this.IdEstado = (int)record["id_estado"];
        }

        public EDocumento()
        {
            this.IdDocumento = 0;
            this.Descripcion = string.Empty ;
            this.Abreviatura = string.Empty ;
            this.CodigoSunat = string.Empty ;
            this.CodigoSistema = string .Empty;
            this.SigoDocumento = 0;
            this.IngresoSalida = 0;
            this.NumeroItems = 0;
            this.AfectoIgv = false;
            this.Valoriza = false ;
            this.IdEstado = 0;
        }

        #endregion

        #region Propiedades

        public int IdDocumento { get; set; }

        public string Descripcion { get; set; }

        public string Abreviatura { get; set; }

        public string CodigoSunat { get; set; }

        public string CodigoSistema { get; set; }

        public int SigoDocumento { get; set; }

        public int IngresoSalida { get; set; }

        public int NumeroItems { get; set; }

        public Boolean AfectoIgv { get; set; }

        public Boolean Valoriza { get; set; }

        public int IdEstado { get; set; }
        #endregion
        #region Metodos
        public object[] ToObject(int operacion)
        { 
            object[] obj = new object[]
            {
                this.IdDocumento, 
                this.Descripcion, 
                this.Abreviatura, 
                this.CodigoSunat,
                this.IngresoSalida, 
                this.NumeroItems, 
                this.AfectoIgv, 
                this.IdEstado,
                this.Valoriza, 
                this.CodigoSistema, 
                this.SigoDocumento, 
                operacion
            };
            return obj;
        }

        public string  GetCodigoSistema( List <ETipoDocumento > tipos) {
            string codigo = "";
            foreach (ETipoDocumento td in tipos) {
                codigo += td.IsSelectd ? "1" : "0";
            }
            return codigo;
        }

        public List <ETipoDocumento > GetTiposDocumentos(string strCodSistema,List <ETipoDocumento > tipos)
        {
            foreach (ETipoDocumento td in tipos) {
                td.IsSelectd = false;
            }

            for (int pos = 0; pos < strCodSistema.Length; pos++) {
                ETipoDocumento td = tipos.Find(delegate(ETipoDocumento tdoc) {
                    return tdoc.IdTipoDocumento == pos + 1;
                });

                if (td != null) {
                    td.IsSelectd = strCodSistema[pos].ToString() == "1" ? true : false;
                }
            }
            return tipos;
        }
        #endregion
    }
}